# -*- coding: utf-8 -*-
"""
In-Context Learning (ICL) 批量案例：few-shot 提示任务
- ICL 指模型在推理时通过上下文示例学习任务，无需参数微调
- 本例用 Qwen3:8b 本地模型 few-shot 翻译/推理/分类
"""
from langchain_ollama import OllamaLLM

llm = OllamaLLM(model="qwen3:8b", temperature=0.3)

cases = [
    {
        "title": "中译英 few-shot 翻译",
        "prompt": '''你是一个中英互译助手。请根据上下文示例完成最后一句的翻译：

中文：你好！ 英文：Hello!
中文：我爱你。 英文：I love you.
中文：今天天气很好。 英文：The weather is nice today.
中文：祝你好运！ 英文：Good luck!
中文：请帮我关灯。 英文：Please turn off the light.
中文：你来自哪里？ 英文：Where are you from?
中文：我想吃苹果。 英文：I want to eat an apple.
中文：请翻译：我今天很开心。 英文：'''
    },
    {
        "title": "英译中 few-shot 翻译",
        "prompt": '''你是一个英中互译助手。请根据上下文示例完成最后一句的翻译：

English: Good morning! 中文：早上好！
English: How are you? 中文：你好吗？
English: I love programming. 中文：我喜欢编程。
English: The sky is blue. 中文：天空是蓝色的。
English: See you tomorrow! 中文：明天见！
English: Please help me. 中文：请帮帮我。
English: I want to drink water. 中文：我想喝水。
English: Translate: I am very happy today. 中文：'''
    },
    {
        "title": "数学推理 few-shot",
        "prompt": '''你是一个小学数学老师。请根据示例推理最后一个问题的答案：

问题：2+3=？ 答案：5
问题：7-4=？ 答案：3
问题：6+8=？ 答案：14
问题：10-7=？ 答案：3
问题：9+5=？ 答案：14
问题：12-8=？ 答案：4
问题：15+6=？ 答案：21
问题：8+7=？ 答案：'''
    },
    {
        "title": "文本分类 few-shot",
        "prompt": '''你是一个新闻分类助手。请根据示例判断最后一条新闻的类别：

新闻：苹果公司发布新iPhone。 类别：科技
新闻：中国男篮获得亚洲杯冠军。 类别：体育
新闻：美联储宣布加息。 类别：财经
新闻：北京今天大雨。 类别：天气
新闻：SpaceX成功发射火箭。 类别：科技
新闻：人民币汇率上涨。 类别：财经
新闻：Translate: 今晚有雷阵雨。 类别：'''
    }
]

if __name__ == "__main__":
    print("【In-Context Learning Few-Shot 批量案例】\n")
    for case in cases:
        print(f"--- {case['title']} ---")
        print("Prompt:\n" + case["prompt"])
        result = llm.invoke(case["prompt"])
        print("模型输出：")
        print(result)
        print("\n")
